<template>
  <view class="container">
    <view class="left-bottom-sign"></view>
    <view class="back-btn yticon icon-zuojiantou-up" @click="navBack"></view>
    <view class="right-top-sign"></view>
    <!-- 设置白色背景防止软键盘把下部绝对定位元素顶上来盖住输入框等 -->
    <view class="wrapper">
      <view class="left-top-sign">LOGIN</view>

      <view class="welcome"> 欢迎回来！ </view>
      <view class="input-content">
        <view class="input-item">
          <view class="itc-ctnr">
            <text class="itc" @click="selectITC">+{{ itc }}</text>
            <text class="yticon icon-you"></text>
          </view>
          <wInput
            v-model="phone"
            type="text"
            placeholder="请输入手机号"
          ></wInput>
        </view>
        <view class="input-item code">
          <wInput
            v-model="verCode"
            type="number"
            maxlength="6"
            placeholder="输入验证码"
            isShowCode
            ref="runCode"
            @setCode="getVerCode()"
          ></wInput>
        </view>
      </view>
      <button class="confirm-btn" @click="toLogin" :disabled="logining">
        登录
      </button>
    </view>
  </view>
</template>

<script>
import wInput from '../../components/watch-login/watch-input.vue';
import { throttle } from '@/utils';
import { mapMutations } from 'vuex';
import { memberLogin, memberInfo, memberGetAuthCode } from '@/api/member.js';

const chinaMobileRE = /^1[3456789]\d{9}$/;
const philippineMobileRE = /^9[0-9]{9}$/;
const macaoMobileRE = /^(6[689]\d{7})$/;
const HongkongMobileRE = /^([6|9])\d{7}$/;
const TaiMobileRE = /^09\d{8}$/;
const otherMobileRE = /^[1-9]\d{5,20}/;
export default {
  components: { wInput },
  data() {
    return {
      itc: '63',
      phoneTips: '获取验证码',
      phone: '',
      password: '',
      logining: false,
      verCode: '', //验证码
      showAgree: true, //协议是否选择
      isRotate: false, //是否加载旋转
    };
  },
  onLoad() {
    this.phone = uni.getStorageSync('phone') || '';
    this.itc = uni.getStorageSync('itc') || '63';
  },
  methods: {
    ...mapMutations(['login']),
    navBack() {
      uni.navigateBack();
    },
    selectITC: throttle(function () {
      const self = this;
      uni.navigateTo({
        url: '/pages/countries/countries',
        events: {
          selectCountry(country) {
            if (country) {
              self.itc = country.codeKey;
            }
          },
        },
      });
    }),

    getVerCode() {
      if (
        (parseInt(this.itc) === 86 && !chinaMobileRE.test(this.phone)) ||
        (parseInt(this.itc) === 63 && !philippineMobileRE.test(this.phone)) ||
        (parseInt(this.itc) === 853 && !macaoMobileRE.test(this.phone)) ||
        (parseInt(this.itc) === 886 && !TaiMobileRE.test(this.phone)) ||
        (parseInt(this.itc) === 852 && !HongkongMobileRE.test(this.phone)) ||
        !otherMobileRE.test(this.phone)
      ) {
        this.$api.msg('请输入正确格式的手机号');
        return;
      }
      //获取验证码
      memberGetAuthCode({
        itc: this.itc,
        telephone: this.phone,
      }).then((response) => {
        console.log(93, response.data);
        if (response.code === 1000) {
          this.$refs.runCode.$emit('runCode'); //触发倒计时（一般用于请求成功验证码后调用）
          this.$api.msg('验证码已发送');
        }
      });
    },
    async toLogin() {
      this.logining = true;
      memberLogin({
        itc: this.itc,
        telephone: this.phone,
        authCode: this.verCode,
      })
        .then((response) => {
          let token = response.data.tokenHead + response.data.token;
          uni.setStorageSync('token', token);
          uni.setStorageSync('phone', this.phone);
          uni.setStorageSync('itc', this.itc);
          memberInfo().then((response) => {
            this.login(response.data);
            uni.navigateBack();
          });
        })
        .catch(() => {
          this.logining = false;
        });
    },
  },
};
</script>

<style lang="scss">
page {
  background: #fff;
}

.container {
  padding-top: 115px;
  position: relative;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  background: #fff;
}

.wrapper {
  position: relative;
  z-index: 90;
  background: #fff;
  padding-bottom: 40upx;
}

.back-btn {
  position: absolute;
  left: 40upx;
  z-index: 9999;
  padding-top: var(--status-bar-height);
  top: 40upx;
  font-size: 40upx;
  color: $font-color-dark;
}

.left-top-sign {
  font-size: 120upx;
  color: $page-color-base;
  position: relative;
  left: -16upx;
}

.right-top-sign {
  position: absolute;
  top: 80upx;
  right: -30upx;
  z-index: 95;

  &:before,
  &:after {
    display: block;
    content: '';
    width: 400upx;
    height: 80upx;
    background: #b4f3e2;
  }

  &:before {
    transform: rotate(50deg);
    border-radius: 0 50px 0 0;
  }

  &:after {
    position: absolute;
    right: -198upx;
    top: 0;
    transform: rotate(-50deg);
    border-radius: 50px 0 0 0;
  }
}

.left-bottom-sign {
  position: absolute;
  left: -270upx;
  bottom: -320upx;
  border: 100upx solid #d0d1fd;
  border-radius: 50%;
  padding: 180upx;
}

.welcome {
  position: relative;
  left: 50upx;
  top: -90upx;
  font-size: 46upx;
  color: #555;
  text-shadow: 1px 0px 1px rgba(0, 0, 0, 0.3);
}

.input-content {
  padding: 0 80upx;
}

.input-item {
  display: flex;
  align-items: center;

  padding: 0 40upx;
  background: #f8f6fc;
  height: 110upx;
  border-radius: 4px;
  margin-bottom: 50upx;

  &:last-child {
    margin-bottom: 0;
  }
  .itc-ctnr {
    display: flex;
    align-items: center;
    margin-right: 10upx;
    .itc {
      font-size: 30upx;
    }
    .yticon {
      font-size: 26upx;
      line-height: 30upx;
    }
  }
  .tit {
    height: 50upx;
    line-height: 56upx;
    font-size: $font-sm + 2upx;
    color: $font-color-base;
  }

  input {
    height: 60upx;
    font-size: $font-base + 2upx;
    color: $font-color-dark;
    width: 100%;
  }
}
.code {
  justify-content: space-between;
}

.confirm-btn {
  width: 600upx;
  height: 76upx;
  line-height: 76upx;
  border-radius: 50px;
  margin-top: 70upx;
  background: $uni-color-primary;
  color: #fff;
  font-size: $font-lg;

  &:after {
    border-radius: 100px;
  }
}

.confirm-btn2 {
  width: 630upx;
  height: 76upx;
  line-height: 76upx;
  border-radius: 50px;
  margin-top: 40upx;
  background: $uni-color-primary;
  color: #fff;
  font-size: $font-lg;

  &:after {
    border-radius: 100px;
  }
}

.forget-section {
  font-size: $font-sm + 2upx;
  color: $font-color-spec;
  text-align: center;
  margin-top: 40upx;
}

.register-section {
  position: absolute;
  left: 0;
  bottom: 50upx;
  width: 100%;
  font-size: $font-sm + 2upx;
  color: $font-color-base;
  text-align: center;

  text {
    color: $font-color-spec;
    margin-left: 10upx;
  }
}
</style>
